#ifndef __MPU6050_H
#define __MPU6050_H

#include "Arduino.h"
#include "Wire.h"

#include "imu.h"

// ===============================MPU6050寄存器地址===============================
#define MPU6050_ADDRESS		    0x68
#define	MPU6050_SMPLRT_DIV		0x19
#define	MPU6050_CONFIG			0x1A
#define	MPU6050_GYRO_CONFIG		0x1B
#define	MPU6050_ACCEL_CONFIG	0x1C

#define	MPU6050_ACCEL_XOUT_H	0x3B
#define	MPU6050_ACCEL_XOUT_L	0x3C
#define	MPU6050_ACCEL_YOUT_H	0x3D
#define	MPU6050_ACCEL_YOUT_L	0x3E
#define	MPU6050_ACCEL_ZOUT_H	0x3F
#define	MPU6050_ACCEL_ZOUT_L	0x40
#define	MPU6050_TEMP_OUT_H		0x41
#define	MPU6050_TEMP_OUT_L		0x42
#define	MPU6050_GYRO_XOUT_H		0x43
#define	MPU6050_GYRO_XOUT_L		0x44
#define	MPU6050_GYRO_YOUT_H		0x45
#define	MPU6050_GYRO_YOUT_L		0x46
#define	MPU6050_GYRO_ZOUT_H		0x47
#define	MPU6050_GYRO_ZOUT_L		0x48

#define	MPU6050_PWR_MGMT_1		0x6B
#define	MPU6050_PWR_MGMT_2		0x6C
#define	MPU6050_WHO_AM_I		0x75

#define MPU6050_INT_EN_REG      0x38
#define MPU6050_INTBP_CFG_REG   0x37
// ===============================MPU6050寄存器地址===============================

extern int16_t mpu6050_gyro_x, mpu6050_gyro_y, mpu6050_gyro_z;       // 三轴陀螺仪数据     GYRO (陀螺仪)
extern int16_t mpu6050_acc_x,  mpu6050_acc_y,  mpu6050_acc_z;        // 三轴加速度值       ACC

// MPU6050初始化
void MPU6050_Init(void);
// 指定地址写
void MPU6050_WriteReg(uint8_t Address, uint8_t Data);
// 指定地址读
uint8_t MPU6050_ReadReg(uint8_t Address);
// 获取ID值
uint8_t MPU6050_GetID(void);

// 获取加速度值
void MPU6050_GetAcc(void);
// 获取陀螺仪计数据
void MPU6050_GetGyro(void);
// 获取欧拉角度
void MPU6050_GetEuler(void);            // 跟定时中断联用
// 去陀螺仪零漂移
void MPU6050_GyroErro(void);

#endif
